查看原文
其他

SQL查找是否"存在",别再count了!

关注Java就该这么学带你全面认识Java
Java就该这么学后台回复 1024 有特别礼包

责编:Java就该这么学 | 来源:网络

上一篇精彩:开源客服工单系统,让工单系统变得更加轻便,支持小程序!
大家好,我是Java就该这么学。

根据某一条件从数据库表中查询 『有』与『没有』,只有两种状态,那为什么在写SQL的时候,还要SELECT count(*)呢?


无论是刚入道的程序员新星,还是精湛沙场多年的程序员老白,都是一如既往的count

目前多数人的写法

多次REVIEW代码时,发现如现现象:

业务代码中,需要根据一个或多个条件,查询是否存在记录,不关心有多少条记录。普遍的SQL及代码写法如下。另外,搜索公众号GitHub猿后台回复“赚钱”,获取一份惊喜礼包。

SQL写法

SELECT count(*) FROM table WHERE a = 1 AND b = 2

Java写法

int nums = xxDao.countXxxxByXxx(params);
if ( nums > 0 ) {
  //当存在时,执行这里的代码
else {
  //当不存在时,执行这里的代码
}

是不是感觉很OK,没有什么问题

优化方案

推荐写法如下:

SQL写法

SELECT 1 FROM table WHERE a = 1 AND b = 2 LIMIT 1

Java写法

Integer exist = xxDao.existXxxxByXxx(params);
if ( exist != NULL ) {
  //当存在时,执行这里的代码
else {
  //当不存在时,执行这里的代码
}

SQL不再使用count,而是改用LIMIT 1,让数据库查询时遇到一条就返回,不要再继续查找还有多少条了

业务代码中直接判断是否非空即可

总结

根据查询条件查出来的条数越多,性能提升的越明显,在某些情况下,还可以减少联合索引的创建。

欢迎有需要的同学试试,如果本文对您有帮助,也请帮忙点个 赞 + 在看 啦!❤️

在 GitHub猿 还有更多优质项目系统学习资源,欢迎分享给其他同学吧!



公众号后台回复 Java 或者 面试 有惊喜礼包!Java就该这么学交流群

 「Java就该这么学」建立了读者Java交流群,大家可以添加小编微信进行加群。欢迎有想法、乐于分享的朋友们一起交流学习。

扫描添加好友邀你进Java群,加我时注明姓名+公司+职位】


版权申明:内容来源网络,版权归原作者所有。如有侵权烦请告知,我们会立即删除并表示歉意。谢谢。

往日文章:

想了解Java后端学习路线?看完这篇就够了!
2天3夜开发了一个商城系统,用它挣了10.7万!
别再用 BeanUtils 了,这款 PO VO DTO 转换神器不香么?
SpringBoot+Nacos+Kafka 简单实现微服务流编排
别再用 BeanUtils 了,这款 PO VO DTO 转换神器不香么?
Redis 官方可视化工具,功能真心强大!
分布式实时日志分析解决方案部署架构
CAS 与 AQS 简单理解
OA多级审批流程表设计方案(干货满满)
看看人家那资源管理平台,那叫一个优雅!
配置 Nginx 的神器
单点登录实现demo!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存